package com.yes.xr;

/*import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
public class AppCore {
    public static void main(String[] args) throws Exception {
        // TODO
        // 1. 通过反射得到 CustomerService 类的实例 c
        // 2. 调用实例 c 的 say 方法并正确输出结果
        Class<?> a = Class.forName("com.yes.yll.CustomerService");
        Object c = a.newInstance();

        Field service = a.getDeclaredField("service");
        service.setAccessible(true);
        Class<?> U = Class.forName("com.yes.yll.UserService");
        service.set(c, U.newInstance());

        Method say = a.getMethod("say");
        say.invoke(c);
    }
}*/




import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class AppCore {
    public static void main(String[] args) throws Exception {
        // TODO
        // 1. 通过反射得到 CoreService 类的实例 c
        // 2. 调用实例 c 的 say 方法并看到输出结果
        // 要求：不要使用 new 关键字
        Class<?> a = Class.forName("com.yes.yll.CoreService");
        Object c = a.newInstance();

        /*与方法一一起用的
        Class<?> C = Class.forName("com.yes.yll.CustomerService");
        Class<?> U = Class.forName("com.yes.yll.OrderService");
        Class<?> S = Class.forName("com.yes.yll.UserService");*/

        Field[] fields = a.getDeclaredFields();
        for(int i=0;i<fields.length;i++){
            Field field = fields[i];
            field.setAccessible(true);
            Class<?> type = field.getType();
            /* 可用方法一
            if(type.toString().endsWith("CustomerService")){
                field.set(c,C.newInstance());
            }
            if(type.toString().endsWith("OrderService")){
                field.set(c,U.newInstance());
            }
            if(type.toString().endsWith("UserService")){
                field.set(c,S.newInstance());
            }*/
            //方法二
            Object o = type.newInstance();
            field.set(c,o);

        }
        Method say = a.getDeclaredMethod("say");
        say.invoke(c);
    }
}
